/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package netsrv;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Stack;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author root
 **/
public class Server extends Thread {
    private String code;
    private int length;
    private int computadoras;
    private Stack<Socket> pilaSockets = new Stack();
    private int conectados = 0;
    private boolean limite = false;

    public Server(String hash, int longitud, int equipos) {
        code = hash;
        length = longitud;
        computadoras = equipos;
    }
    @Override
    public void run() {
        try {
            ServerSocket server = new ServerSocket(666);

            while (!limite) {
                try {
                    System.out.println("[!]Se necesitan " + (computadoras-conectados) + " clientes mas.");
                    System.out.println("[!]Esperando nuevos clientes...");
                    Socket cliente = server.accept();
                    DataInputStream dis = new DataInputStream(cliente.getInputStream());
                    String nombre = dis.readUTF();
                    System.out.println("[+]El cliente " + nombre + " desea añadirse al cluster.");
                    System.out.println("[?]Permitir operacion? (y/n)");
                    DataInputStream lecturaTeclado = new DataInputStream(System.in);
                    String opcion = lecturaTeclado.readLine();
                    opcion = opcion.trim();
                    if(opcion.equals("y") || opcion.equals("yes") || opcion.equals("s") || opcion.equals("si")) {
                        pilaSockets.add(cliente);
                        conectados =+1;
                    }else if(opcion.equals("n") || opcion.equals("no")) {
                        System.out.println("[-]Operacion cancelada.");
                    }else{
                        System.out.println("[-]Opcion introducida no reconocida, el cliente ha sido rechazado.");
                    }
                    if(conectados == computadoras) {
                        limite = true;
                    }
                } catch (IOException ex) {
                    Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            while(true) {
                Socket cliente = pilaSockets.pop();
                DataOutputStream dos = new DataOutputStream(cliente.getOutputStream());
                dos.writeUTF(code);


            }
        } catch (IOException ex) {
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
